package org.example.gof.proxy.service.impl;

import org.example.gof.proxy.service.OrderService;
import org.springframework.stereotype.Service;

/**
 * org.example.gof.proxy.service.impl
 *
 * @author 莫磊
 * @description	代理对象：要和目标对象有相同的行为
 * 					客户端在使用代理对象时就像使用目标对象
 * 					代理对象会调用目标对象，并完成一些操作
 *
 * 			泛化：继承关系
 * 			关联：类中有属性关联到其他对象
 * 		    泛化的耦合度>关联
 *
 * 		静态代理：
 * 		    优点：解决OCP原则，使用关联降低了代码耦合度
 * 		    缺点：如果系统中有很多接口，每个接口都需要代理类，这样类数量会有很多，不好维护
 * 		    	（可以使用动态代理方式进行处理：动态代理也是代理模式，只不过添加了字节码生成技术，可以在内存中动态的生成代理类）
 * @date 2025/7/28
 */
@Service
public class OrderServiceProxy implements OrderService {

	/**
	 * 将目标对象作为代理对象的一个属性，这种方式比继承关系的耦合度低
	 * 使用公共接口，公共接口的耦合度低
	 */
	private OrderService target;

	public OrderServiceProxy (OrderService orderService) {
		this.target = orderService;
	}

	@Override
	public void generate () {
		long startTime = System.currentTimeMillis();
		target.generate();
		long endTime = System.currentTimeMillis();
		System.out.println("耗时：" + (endTime - startTime));
	}

	@Override
	public void modify () {
		long startTime = System.currentTimeMillis();
		target.modify();
		long endTime = System.currentTimeMillis();
		System.out.println("耗时：" + (endTime - startTime));
	}

	@Override
	public void detail () {
		long startTime = System.currentTimeMillis();
		target.detail();
		long endTime = System.currentTimeMillis();
		System.out.println("耗时：" + (endTime - startTime));
	}
}
